#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygame, os, sys, random
from pygame.locals import *
from funcoes import *
from mapas import *
from leveis import *
from time import time

pygame.init()

#### Chama niveis ####
niveis = [level1(), level2(), level3(), level4()] #colocar um lista com as funcoes das fases e ir removendo no if
level = niveis[0] # variavel que vai controlar a mudanca de fase, informacoes
lista = level['lista']

# falta tratar erro se nao tiver mais o que remover... Colocar video no fim..
if verifica_se_ganhou(level['lista']):
        niveis = niveis.pop([0])


#### Audio ####
carrega_musica(level, opcoes)

pong = carrega_som('pong.wav')
atualizar_volume_sons(pong)

som_barra = carrega_som('barra.wav')
atualizar_volume_sons(som_barra)

som_tijolo = carrega_som('slide.wav')
atualizar_volume_sons(som_tijolo)

som_quebra = carrega_som('explosion.wav')
atualizar_volume_sons(som_quebra)

clock = pygame.time.Clock()
	 
##### Configuracao da Tela ####
tela, fundo = config_tela(opcoes, tela, level)
largura_tela, altura_tela = 800, 600


#### Imagens ####
gameover = pygame.image.load("images" + os.sep + "gameover.jpg").convert()
tijolo = carrega_image("tijolo2.png").convert()
imagem_barra = carrega_image("bouncer3.png").convert_alpha()
imagem_bola = carrega_image("ball4.png").convert_alpha()


#### Configuracao do Tijolo ####
largura_tijolo, altura_tijolo = tijolo.get_size()
tijolo_x, tijolo_y = (90, 100)


#### Configuracao da Barra ####
largura_barra, altura_barra = imagem_barra.get_size()
barra_x, barra_y = (largura_tela/2 - largura_barra/2), (altura_tela - altura_barra * 6)


#### Configuracao da Bola ####
largura_bola, altura_bola = imagem_bola.get_size()
bola_varia_x, bola_varia_y = 3, 3
bola_x, bola_y = (largura_tela/2 - largura_bola/2), 500


sorteados = {}
for i in range(50):
	sorteados[random.randint(0,len(lista))] = 0


pausado = False
cont_quebrados = 0

while True:
	for event in pygame.event.get():
		if event.type == QUIT: exit()
		if event.type == KEYDOWN:
			if event.key == K_p:
				pausado = True
				if pausado:
					pausado = carrega_image('pausado.png')
					tela.blit(pausado,((largura_tela/3)+10,(altura_tela/3)+50))
					pygame.display.flip()
					while pausado:
						for event in pygame.event.get():
							if event.type == pygame.QUIT: sys.exit()
							
							if event.type == KEYDOWN:
								if event.key == K_ESCAPE:
									sys.exit()
								if event.key == K_p:
										pausado = False
			if event.key == K_ESCAPE:
					exit()
			if event.key == K_SPACE:
				if estado['morte']:
					bola_varia_x, bola_varia_y = 5, 5
					estado['morte'] = False
					
					
	pressed_keys = pygame.key.get_pressed()


	#### Movimento da bola ####
	bola_x += bola_varia_x
	bola_y += bola_varia_y


	#### Movimento da barra ####
	if pressed_keys[K_LEFT] and barra_x > 0:
		barra_x -= 10
	if pressed_keys[K_RIGHT] and barra_x < 680:
		barra_x += 10	
	if estado['morte']:
		bola_x, bola_y =  barra_x + (largura_barra/2 - largura_bola/2), barra_y - altura_bola/1.40
		
	
	#### Colisao - Tela ####
	if bola_x <= 0 or bola_x + largura_bola >= largura_tela:
		bola_varia_x = -bola_varia_x
		pong.play(0)
		
	if bola_y <= 0:
		bola_varia_y = -bola_varia_y
		pong.play(0)
			
	if bola_y <= barra_y:
		bola_varia_y = +bola_varia_y
		
	
	if bola_y + altura_bola >= 500: #evento = morre
		bola_varia_x, bola_varia_y = 0,0
		estado['morte'] = True
		estado['vidas'] -= 1


	#### Colisao - Barra ####
	if bola_y + altura_bola >= barra_y:
		if barra_x <= bola_x + largura_bola and bola_x <= barra_x + largura_barra:
			bola_varia_y = -bola_varia_y
			bola_y = bola_y - 5 # Tratamento da colisao lateral 5
			if not estado['morte']:
				som_barra.play(0)
			
		elif barra_x <= bola_x + largura_bola <= barra_x + largura_barra:
			bola_varia_y = -bola_varia_y
			som_barra.play(0)
			
			
	#### Colisao - Tijolo ####
	bola_x1 = bola_x + largura_bola
	bola_y1 = bola_y + altura_bola
	
	for elemento in lista:
		i = elemento[1] # Posicao
		i2 = elemento[0] # Numero
		
		if i[1] <= bola_y1 <= i[3] and i[0] < bola_x < i[2]: # Colisao abaixo do tijolo
			bola_varia_y = -bola_varia_y
			bola_y += 10
			if i2 in sorteados.keys():
				sorteados[i2] += 1
				if sorteados[i2] == 3:
					lista.remove(elemento)
					som_quebra.play()
					estado['score'] += 15
			if i2 not in sorteados.keys():
				lista.remove(elemento)
				som_quebra.play()
				estado['score'] += 10
			break
		if i[1] <= bola_y <= i[3] and i[0] < bola_x < i[2]: # Colisao acima do tijolo
			bola_varia_y = -bola_varia_y
			bola_y -= 10
			if i2 in sorteados.keys():
				sorteados[i2] += 1
				if sorteados[i2] == 3:
					lista.remove(elemento)
					som_quebra.play()
					estado['score'] += 15
			if i2 not in sorteados.keys():
				lista.remove(elemento)
				som_quebra.play()
				estado['score'] += 10
			break
		if i[0] <= bola_x <= i[2] and i[1] < bola_y < i[3]: # Colisao a direita do tijolo
			bola_varia_x = -bola_varia_x
			bola_x += 10
			if i2 in sorteados.keys():
				sorteados[i2] += 1
				if sorteados[i2] == 3:
					lista.remove(elemento)
					som_quebra.play()
					estado['score'] += 15
			if i2 not in sorteados.keys():
				lista.remove(elemento)
				som_quebra.play()
				estado['score'] += 10
			break
		if i[0] <= bola_x1 <= i[2] and i[1] < bola_y < i[3]: # Colisao a esquerda do tijolo
			bola_varia_x = -bola_varia_x
			bola_x -= 10 
			if i2 in sorteados.keys():
				sorteados[i2] += 1
				if sorteados[i2] == 3:
					lista.remove(elemento)
					som_quebra.play()
					estado['score'] += 15
			if i2 not in sorteados.keys():
				lista.remove(elemento)
				som_quebra.play()
				estado['score'] += 10
			break	

			
	tela.blit((fundo), (0,0))
	
	#### Blit - Vidas ####
	fonte = pygame.font.Font(('fonts' + os.sep + 'teste2.ttf'), 30)
	vidas = fonte.render('Vidas: '+str(estado['vidas']), True, (255, 255, 0))	
	tela.blit(vidas, (300, 560))
	
	
	#### Blit - Score ####
	fonte = pygame.font.Font(('fonts' + os.sep + 'teste2.ttf'), 30)
	vidas = fonte.render('Score: '+str(estado['score']), True, (255, 255, 0))	
	tela.blit(vidas, (450, 560))
	
	if estado['vidas'] == 0:
		tela.blit(gameover, (0,0))
		blit_texto(15, 'Pressione Enter para voltar ao Menu', (255,255,255), (245,508), tela)
		for event in pygame.event.get():
			if event.type == pygame.QUIT:
				sys.exit()
			if event.type == pygame.KEYDOWN:
				if event.key == pygame.K_KP_ENTER or event.key == pygame.K_RETURN:
					Menu()
		pygame.display.flip()
		while 1:
			for event in pygame.event.get():
				if event.type == pygame.QUIT:
					sys.exit()
				if event.type == pygame.KEYDOWN:
					if event.key == pygame.K_ESCAPE:
						sys.exit()
					
	if lista == []: # Verifica se nao tem mais tijolos
		break
		while 1:
			restart = False
			for event in pygame.event.get():
				if event.type == pygame.QUIT:
					sys.exit()
				if event.type == pygame.KEYDOWN:
					if event.key == pygame.K_ESCAPE:
						sys.exit()

	
	for elemento in lista:
		i = elemento[1]
		tela.blit(tijolo, (i[0],i[1]))

		
	tela.blit(imagem_bola, (bola_x, bola_y))
	tela.blit(imagem_barra, (barra_x, barra_y))

	clock.tick(80)
	
	pygame.display.update()
